﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Transactions;

namespace Unimaq.Macroprocesos.AccesoDatos
{
    public class DocumentoDAO
    {
        ProcesosUnimaqEntities conexion;

        public int Registrar(Documento nuevoDocumento)
        {
            using (conexion = new ProcesosUnimaqEntities())
            {
                conexion.Documento.Add(nuevoDocumento);
                return conexion.SaveChanges();
            }
        }

        public List<Documento> Listar()
        {
            using (conexion = new ProcesosUnimaqEntities())
            {
                return conexion.Documento.ToList();
            }
        }

        public int Actualizar(Documento selectedDocumento, Documento updDocumento)
        {
            using (conexion = new ProcesosUnimaqEntities())
            {
                conexion.Documento.Attach(selectedDocumento);
                selectedDocumento.IdProceso = updDocumento.IdProceso;
                selectedDocumento.IdTipoDocumento = updDocumento.IdTipoDocumento;
                selectedDocumento.Codigo = updDocumento.Codigo;
                selectedDocumento.NumeroDocumento = updDocumento.NumeroDocumento;
                selectedDocumento.Nombre = updDocumento.Nombre;
                selectedDocumento.RutaAcceso = updDocumento.RutaAcceso;
                return conexion.SaveChanges();
            }
        }

        public int Eliminar(Documento selectedDocumento)
        {
            int result = 0;

            using (TransactionScope ts = new TransactionScope())
            {
                using (conexion = new ProcesosUnimaqEntities())
                {
                    try
                    {
                        Documento deleteDocumento = conexion.Documento.Single(x => x.Id == selectedDocumento.Id);
                        conexion.Documento.Remove(deleteDocumento);
                        result = conexion.SaveChanges();
                        ts.Complete();
                    }
                    catch (Exception)
                    {
                        result = 0;
                    }
                } 
            }

            return result;
        }
    }
}
